﻿namespace IdGen;

/// <summary>
/// 为向 <see cref="IdGenerator"/> 提供时间信息的时间源提供接口
/// </summary>
public interface ITimeSource
{
    DateTimeOffset Epoch { get; }

    /// <summary>
    /// 返回单个时间刻度的持续时间
    /// </summary>
    /// <remarks>
    /// 由 <see cref="ITimeSource"/> 来定义 “时间刻度（tick）” 是什么；它可以是纳秒、毫秒、秒，甚至是天或年
    /// </remarks>
    TimeSpan TickDuration { get; }

    /// <summary>
    /// Returns the current number of ticks for the <see cref="ITimeSource"/>.
    /// </summary>
    /// <remarks>
    /// 由 <see cref="ITimeSource"/> 来定义 “时间刻度（tick）” 是什么；它可以是纳秒、毫秒、秒，甚至是天或年
    /// </remarks>
    long GetTicks();
}